package com.bestcem.xm.label.service;

import com.bestcem.xm.common.core.domain.web.ServiceResult;
import com.bestcem.xm.label.entity.pojo.LabelValueDO;
import com.bestcem.xm.label.grpc.service.param.label.*;
import com.bestcem.xm.label.service.dto.label.LabelValueDTO;

import java.util.List;

/**
 * 标签值相关服务接口
 *
 * @author yf.wang <yf.wang@idiaoyan.com>
 * @version V1.0
 * @date 2021/5/21
 */
public interface LabelValueService {

    /**
     * 检查标签值名称在当前标签是否重复
     *
     * @param param
     * @return
     */
    ServiceResult<Boolean> checkLabelValueName(CheckLabelValueNameParam param);

    /**
     * 更新标签值顺序
     *
     * @param parm
     * @return
     */
    ServiceResult<Boolean> batchUpdateLabelValues(BatchUpdateLabelValuesParm parm);

    /**
     * 新增标签值
     *
     * @param tagValueParam
     * @param labelParam
     * @param labelId
     * @param labelGroupName
     * @return
     */
    void save(List<CreateLabelValueParam> tagValueParam, LabelParamBase labelParam, String labelId, String labelGroupName);

    /**
     * 根据id获取标签值信息
     *
     * @param labels
     * @return
     */
    List<LabelValueDO> findById(List<String> labels);

    /**
     * 获取标签值的相关信息
     *
     * @param param
     * @return
     */
    ServiceResult<List<LabelValueDTO>> listLabelValues(ListLabelValuesParam param);

    /**
     * 批量更新标签值
     *
     * @param updateValues
     * @return
     */
    Boolean batchUpdate(List<LabelValueDO> updateValues);

    /**
     * 批量删除比哦爱去哪值
     *
     * @param ids
     * @return
     */
    Boolean deleteByIds(List<String> ids);

    /**
     * 根据 标签id统计相关标签值的数量
     *
     * @param labelId
     * @return
     */
    Integer countByLabelId(String labelId);

    /**
     * 更新标签值的冗余信息
     *
     * @param param
     * @param labelGroupName
     * @param labelName
     * @return
     */
    Boolean update(UpdateLabelParam param, String labelGroupName, String labelName);

    /**
     * 根据标签ID获取所有的标签值
     *
     * @param id
     * @return
     */
    List<LabelValueDO> findByLabelId(String id);

    /**
     * 获取该标签id下所有的标签值value
     *
     * @param id
     * @return
     */
    List<LabelValueDO> findValueByLabelId(String id);

    /**
     * 根据 组织id 和 标签id 统计数据
     *
     * @param orgId
     * @param labelId
     * @return
     */
    Integer countByOrgIdAndLabelId(String orgId, String labelId);

    /**
     * 删除该组织 标签下的标签值
     *
     * @param orgId
     * @param id
     */
    void deleteByOrgIdAndLabelId(String orgId, String id);
}
